○リモートオブジェクト(分散オブジェクト)
遠隔にあるオブジェクトを参照できます
もちろん値も共有できます。
リモートオブジェクトのメソッドを呼び出した場合の処理は、サーバー側が処理します。
DCOMの後継みたいです。
■リモートオブジェクト------------------------------------------------------
□プロジェクト ClassLibrary リモートオブジェクトの作成
□ファイル名 : ClassLibrary1
VB.net==========================
Public Class Class1
Inherits System.MarshalByRefObject
Dim pos As Integer
Public Function setInt(ByVal a As Integer) As Integer
pos = a
Return a
End Function
Public Function getInt() As Integer
Return pos
End Function
End Class
C#==========================
namespace ClassLibrary1
{
public class Class1 : System.MarshalByRefObject
{
public int pos;
public int setInt(int a)
{
pos=a;
return a;
}
public int getInt()
{
return pos;
}
}
}
■サーバー------------------------------------------------------
コンソールアプリケーションとして作成
□System.Runtime.Remoting.dllを参照
□リモートオブジェクトとして作成した ClassLibrary1 を参照
HttpChannel : HTTP SOAP によりインターネット経由でオブジェクトにアクセスできる
TcpChannel : TCP Binary により閉じられた環境でのオーバーヘッドの低さを活かせられる
VB.net==========================
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp
Module Module1
Sub Main()
Dim chan As TcpChannel = New TcpChannel(1000)
ChannelServices.RegisterChannel(chan)
RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("ClassLibrary1.Class1,ClassLibrary1"), "test", WellKnownObjectMode.Singleton)
Console.WriteLine("リターンキーを押すと終了します。")
Console.ReadLine()
ChannelServices.UnregisterChannel(chan)
End Sub
End Module
C#==========================
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace ConsoleApplication3
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
TcpChannel chan = new TcpChannel(1000);
ChannelServices.RegisterChannel(chan);
RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("ClassLibrary1.Class1,ClassLibrary1"), "test", WellKnownObjectMode.Singleton);
Console.WriteLine("リターンキーを押すと終了します。");
Console.ReadLine();
ChannelServices.UnregisterChannel(chan);
}
}
}
■クライアント--------------------------------------------------------------
□System.Runtime.Remoting.dllを参照
□リモートオブジェクトとして作成した ClassLibrary1 を参照
VB.net==========================
Dim remoteObj As ClassLibrary1.Class1
remoteObj = CType(Activator.GetObject(GetType(ClassLibrary1.Class1), "tcp://localhost:1000/test"), ClassLibrary1.Class1)
'リモートオブジェクトのメソッドの呼び出し
remoteObj.setInt(11)
MessageBox.Show(remoteObj.getInt().ToString())
C#==========================
ClassLibrary1.Class1 remoteObj;
remoteObj = (ClassLibrary1.Class1)(Activator.GetObject(typeof(ClassLibrary1.Class1), "tcp://localhost:1000/test"));
//リモートオブジェクトのメソッドの呼び出し
remoteObj.setInt(11);
MessageBox.Show(remoteObj.getInt().ToString());